package db;

import java.util.List;

import domain.Announcement;
import domain.Club;
import web.PaginationSupport;

/**
 * 公告资源库接口
 */
public interface AnnouncementRepository {

    /**
     * 获取公告的总数
     * @return 公告的数量
     */
    long count();

    /**
     * 获取特定社团中公告的总数
     * @param clubID    社团ID
     * @return  社团中公告的数量
     */
    long countByClubID(int clubID);


    /**
     * 创建一个新的公告
     * @param announcement 新公告的信息
     * @return 新创建的公告
     */
    Announcement save(Announcement announcement);

    /**
     * 根据ID查找公告
     * @param announcementID 公告的ID
     * @return 对应ID的公告
     */
    Announcement findOne(int announcementID);

    /**
     * 分页查找公告
     * @param pageNo 页码
     * @param pageSize 每页的数量
     * @return 分页的公告列表
     */
    PaginationSupport<Announcement> findPage(int pageNo, int pageSize);

    /**
     * 删除公告
     * @param announcementID 公告ID
     * @return 是否删除成功
     */
    boolean deleteAnnouncement(int announcementID);

    /**
     * 获取所有公告
     * @return 所有公告的列表
     */
    List<Announcement> findAll();

    /**
     * 获取社团所有公告
     * @param club  社团
     * @return  社团所有公告
     */
    List<Announcement> findAnnouncementsByClub(Club club);
}

